
local sys = require 'sys'

-- AIr724串口函数文档： https://doc.openluat.com/wiki/21?wiki_page_id=2250
-- 示例： https://doc.openluat.com/wiki/21?wiki_page_id=2201

-----------------------------------------------
--    串口1
-----------------------------------------------
uart.setup(
    1,          --串口id 1
    9600,       --波特率
    8,          --数据位
    uart.PAR_NONE,  --校验
    uart.STOP_1,    --停止位
    0,          -- 0 或者默认 - 消息通知，1 - 无消息上报需要用户主动轮询
    0,          -- txdone消息上报开关,0：关闭，1：打开
    0,          -- 硬流控功能	0：关闭(默认)，1：打开
    1           -- uart rx优先级	0：慢(默认)，1：快
)

--串口1接收到数据,会发布:"UART1_RECEIVED"
--[[
uart.on(1, "receive", function()
    local s = ""
	--log.info("uart 1")
    s = uart.read(1, 100)
    if #s > 0 then -- #s 是取字符串的长度
        log.debug("uart ", 1, "receive ", #s, "bytes: " , s)
		sys.publish("UART1_RECEIVED", s)
    end
end)
]]
-----------------------------------------------
--              串口2
-----------------------------------------------
uart.setup(
    2,      --串口id
    9600,   --波特率
    8,      --数据位
    uart.PAR_NONE,  --校验
    uart.STOP_1,     --停止位
    0,          -- 0 或者默认 - 消息通知，1 - 无消息上报需要用户主动轮询
    0,          -- txdone消息上报开关,0：关闭，1：打开
    0,          -- 硬流控功能	0：关闭(默认)，1：打开
    1           -- uart rx优先级	0：慢(默认)，1：快
)

require "SCA116T"   -- 倾角传感器

--[[串口2接收到数据会发布:"UART2_RECEIVED"或者"Inclinator_Rx"
uart.on(2, "receive", function()
    local s = ""
	--log.info("uart 2")
    s = uart.read(2, "*l")
    if #s > 0 then -- #s 是取字符串的长度
        log.debug("uart ", 2, "receive ", #s, "bytes: " , s:toHex())
		sys.publish("Inclinator_Rx", s)
    end
end)
]]

local f =0
local s = ""
-- 150ms 查询解码模式,第6个设置=1(消息通知，1 - 无消息上报需要用户主动轮询)
-- 感觉是硬件问题，数据乱码；
--[[
sys.timerLoopStart( function()
while true do
    -- 一次要取完串口的所有数据,否则下次不会中断!!! https://docs.openluat.com/air724ug/luatos/app/driver/uart/
    local s,s2="" , ""
    while true do       
        local s2 = uart.read(2, 50)        
            s = s..s2
            if not s2 or string.len(s2) == 0 then break end
    end
    --uart.write(1, s)
    --log.debug("uart ", 2, "receive ", #s, "bytes: " , s:toHex(' '))
    
    if  #s >= 14 then
        log.debug("uart ", 2, "receive ", #s, "bytes: " , s:toHex(' '))
        local x = SCA116T_decode(s)	
        if x then	-- SCA116T解码成功
            if f ==0 then
                TurnOn_Red_LED()
                f =1
            else
                TurnOff_Red_LED()
                f =0
            end
        
                SCA116T.timer =0
                SCA116T.x = x
                if (x-SCA116T.x2) >1 or (x-SCA116T.x2) <-1 then
                    SCA116T.x2 = x
                else
                    SCA116T.x2 = SCA116T.x2 + (x-SCA116T.x2)/32	--滤波
                end
        
                -- sys.publish("Inclinator_Data", "SCA116T",x )		--发布消息“DipSensorData”，传感器型号=SCA16T，X，Y，Z
                log.debug("SCA116T","解码成功，角度：",x)
        end
    end
    
    break
end
end, 20)   
]]




-- 中断解码模式
uart.on(2, "receive", function()

    -- 一次要取完串口的所有数据,否则下次不会中断!!! https://docs.openluat.com/air724ug/luatos/app/driver/uart/
    local s,s2="" , ""
    while true do       
        local s2 = uart.read(2, 50)        
            s = s..s2
            if not s2 or string.len(s2) == 0 then break end
    end

    if s then
        --uart.write(1, s)
        --log.debug("uart ", 2, "receive ", #s, "bytes: " , s:toHex(' '))
    end    
    
    if #s <= 0 then return end       -- #s 是取字符串的长度

    --log.debug("uart ", 2, "receive ", #s, "bytes: " , s:toHex(' '))
    local x = SCA116T_decode(s)	
	if x then	-- SCA116T解码成功
        --  解码成功,红色LED闪烁,调试用的
		if f ==0 then
			TurnOn_Red_LED()
			f =1
		else
			TurnOff_Red_LED()
			f =0
		end

		SCA116T.timer =0
		SCA116T.x = x
		if (x-SCA116T.x2) >1 or (x-SCA116T.x2) <-1 then
			SCA116T.x2 = x
		else
			SCA116T.x2 = SCA116T.x2 + (x-SCA116T.x2)/32	--滤波
		end

		-- sys.publish("Inclinator_Data", "SCA116T",x )		--发布消息“DipSensorData”，传感器型号=SCA16T，X，Y，Z
		--log.debug("SCA116T","解码成功，角度：",x)

    end

    
end)


-----------------------------------------------
--    串口3
-----------------------------------------------
uart.setup(
    3,      --串口id
    9600,   --波特率
    8,      --数据位
    uart.PAR_NONE,  --校验
    uart.STOP_1     --停止位
)

--串口2接收到数据会发布:"UART2_RECEIVED"
uart.on(3, "receive", function()
    local s = ""
	--log.info("uart 3")
    s = uart.read(3, len)
    if #s > 0 then -- #s 是取字符串的长度
        log.debug("uart ", 3, "receive ", #s, "bytes: " , s)
		sys.publish("UART3_RECEIVED", s)
    end
end)
